package com.tencreat.domain.mall;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.tencreat.common.annotation.Excel;
import com.tencreat.common.core.domain.BaseEntity;
import com.tencreat.domain.account.MallUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;


/**
 * 优惠券信息及规则对象 mall_coupon
 *
 * @author tencreat
 * @date 2021-08-19
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@ApiModel
@TableName("mall_coupon")
public class MallCoupon extends BaseEntity<MallCoupon>{
    private static final long serialVersionUID = 1L;


    /** $column.columnComment */
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "ID")
    private Long id;


    /** 优惠券名称 */
    @Excel(name = "优惠券名称")
    @ApiModelProperty(value= "优惠券名称")
    @TableField("`name`")
    private String name;


    /** 优惠券介绍，通常是显示优惠券使用限制文字 */
    @Excel(name = "优惠券介绍，通常是显示优惠券使用限制文字")
    @ApiModelProperty(value= "优惠券介绍，通常是显示优惠券使用限制文字")
    @TableField("`desc`")
    private String desc;


    /** 优惠券标签，例如新人专用  不用 */
    @Excel(name = "优惠券标签，例如新人专用")
    @ApiModelProperty(value= "优惠券标签，例如新人专用")
    @TableField("`tag`")
    private String tag;


    /** 优惠券数量，如果是0，则是无限量 */
    @Excel(name = "优惠券数量，如果是0，则是无限量")
    @ApiModelProperty(value= "优惠券数量，如果是0，则是无限量")
    @TableField("`total`")
    private Long total;


    /** 优惠金额， */
    @Excel(name = "优惠金额，")
    @ApiModelProperty(value= "优惠金额，")
    @TableField("`discount`")
    private BigDecimal discount;


    /** 最少消费金额才能使用优惠券。 */
    @Excel(name = "最少消费金额才能使用优惠券。")
    @ApiModelProperty(value= "最少消费金额才能使用优惠券。")
    @TableField("`min`")
    private BigDecimal min;


    /** 用户领券限制数量，如果是0，则是不限制；默认是1，限领一张. */
    @Excel(name = "用户领券限制数量，如果是0，则是不限制；默认是1，限领一张.")
    @ApiModelProperty(value= "用户领券限制数量，如果是0，则是不限制；默认是1，限领一张.")
    @TableField("`limit`")
    private Integer limit;


    /** 优惠券赠送类型，如果是1所有用户可用，0仅会员可用 */
    @Excel(name = "如果是1所有用户可用 ")
    @ApiModelProperty(value= " 0 所有用户 1 新用户 2指定用户")
    @TableField("`type`")
    private Integer type;


    /** 优惠券状态，如果是0则是正常可用；如果是1则是过期; 如果是2则是下架。 */
    @Excel(name = "优惠券状态，如果是0则是正常可用；如果是1则是过期; 如果是2则是下架。")
    @ApiModelProperty(value= "优惠券状态，如果是0则是正常可用；如果是1则是过期; 如果是2则是下架。")
    @TableField("`status`")
    private Integer status;


    /** 商品限制类型，如果0则全商品，如果是1则是类目限制 */
    @Excel(name = "商品限制类型，如果0则全商品")
//    @ApiModelProperty(value= "商品限制类型，如果0则全商品，如果是1则是专区限制,2-指定商品")
    @ApiModelProperty(value= "商品限制类型，如果0则全商品，1则指定商品")
    @TableField("`goods_type`")
    private Integer goodsType;


    /** 商品限制值，goods_type如果是0则空集合，如果是1则是类目集合，如果是2则是商品集合。 */
    @Excel(name = "商品限制值，goods_type如果是0则空集合")
//    @ApiModelProperty(value= "商品限制值，goods_type如果是0则空集合，如果是1则是专区集合，2则是商品集合")
    @ApiModelProperty(value= "商品限制值，goods_type如果是0则空集合，1则是商品集合")
    @TableField("`goods_value`")
    private String goodsValue;




    /** 有效时间限制，如果是0，则基于领取时间的有效天数days；如果是1，则start_time和end_time是优惠券有效期； */
    @Excel(name = "有效时间限制，如果是0，则基于领取时间的有效天数days；如果是1，则start_time和end_time是优惠券有效期；")
    @ApiModelProperty(value= "有效时间限制，如果是0，则基于领取时间的有效天数days；如果是1，则start_time和end_time是优惠券有效期；")
    @TableField("`time_type`")
    private Integer timeType;


    /** 基于领取时间的有效天数days。 */
    @Excel(name = "基于领取时间的有效天数days。")
    @ApiModelProperty(value= "基于领取时间的有效天数days。")
    @TableField("`days`")
    private Integer days;


    /** 使用券开始时间 */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    @Excel(name = "使用券开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("`start_time`")
    private LocalDateTime startTime;


    /** 使用券截至时间 */
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
    @Excel(name = "使用券截至时间", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("`end_time`")
    private LocalDateTime endTime;

    /** 删除标志（0代表存在 2代表删除） */
    @TableLogic
    @TableField("`del_flag`")
    private String delFlag;



    /** 已使用优惠券 */
    @Excel(name = "已使用优惠券")
    @ApiModelProperty(value= "已使用优惠券")
    @TableField("`used`")
    private Long used;


    /** 剩余优惠券 */
    @Excel(name = "剩余优惠券")
    @ApiModelProperty(value= "剩余优惠券")
    @TableField("`surplus`")
    private Long surplus;

    @ApiModelProperty(value= "发放状态")
    @TableField("`provide_status`")
    private Integer provideStatus;

    /****
     * 当前是否可用 1 可用  0 不可用
     */
    @TableField(exist = false)
    private Boolean canUse;

    @TableField(exist = false)
    private String endTimeStr;

    @TableField(exist = false)
    private String startTimeStr;

    @TableField(exist = false)
    private List<Long> uuids;

    @TableField("`uuid_list`")
    private String uuidList;

    @ApiModelProperty(value= "优惠券领取状态 0-未领取 1-已领取 2-已领完")
    @TableField(exist = false)
    private Integer couponStatus;

    @ApiModelProperty(value= "已领取百分比")
    @TableField(exist = false)
    private Integer received;

    @ApiModelProperty(value= "优惠券使用状态 0-待使用 1-已使用 2-已过期（前端使用）")
    @TableField(exist = false)
    private Integer usedStatus;

    @ApiModelProperty(value= "指定用户集合")
    @TableField(exist = false)
    private List<MallUser> users;

   /* @ApiModelProperty(value= "指定专区集合")
    @TableField(exist = false)
    private List<MallZone> zones;*/

    @ApiModelProperty(value= "指定商品集合")
    @TableField(exist = false)
    private List<MallGoods> goods;

    @ApiModelProperty("排序字段")
    @TableField(exist = false)
    private String sortStr;

    @ApiModelProperty("排序规则")
    @TableField(exist = false)
    private String sortDesc;
}
